Compression of digital video data is needed for many applications. Transmission over limited bandwidth channels such as direct broadcast satellite (DBS) and storage on optical media (i.e., CD, DVD, etc.) are typical examples. In order to achieve efficient compression, complex, computationally intensive processes are used for encoding (or compressing) and decoding (or decompressing) digital video signals. For example, even though MPEG-2 is known as a very efficient method for compressing video, more efficient compression standards such as H.264 (and MPEG-4) are being developed.
H.264 (and MPEG-4) allows for “segmented” motion compensation. A 16×16 macroblock can be motion compensated with one motion vector for the whole macroblock, a pair of motion vectors for the left and right sides (e.g., 8×16 blocks), a pair of motion vectors for the upper and lower halves (e.g., 16×8 blocks) or a motion vector for each 8×8 block. If a motion vector for each 8×8 block is used, then each 8×8 block can be coded with (i) one vector for the 8×8 block, (ii) a pair of motion vectors for the left and right sides (e.g., 4×8 blocks), (iii) a pair of motion vectors for the upper and lower halves (e.g., 8×4 blocks) or (iv) four motion vectors (e.g., one for each 4×4 block).
Conventional motion compensation either searches all block sizes or ignores some block sizes. Performing searches for each possible block size can be expensive. Searching all block sizes involves using expensive, high-speed hardware or a slow, non-real-time software encoder/decoder. When blocks are ignored, quality is sacrificed.
A challenge in conventional digital video data compression techniques involves efficient motion estimation (ME) searches for a compression technique that uses variable block sizes. Conventional solutions employ a full search and a separate hierarchical search for each mode. However, the conventional solutions are computationally intensive, slow, and need expensive hardware to run.
It would be desirable to provide segmented motion estimation with no search for small size blocks.